package pr.vodafone.dao;

import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionException;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import pr.vodafone.dao.dto.Linea;


public class LineaDAO {
private SqlSessionFactory sqlSessionFactory;
    
	private SqlSessionFactory getSqlSessionFactory()
	{
		if (sqlSessionFactory == null){
			try {				
				String resource = "conf/mybatis-config.xml";
				Reader reader = Resources.getResourceAsReader(resource);
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
			}catch (Exception e){
				e.printStackTrace();
			}
		}
		return sqlSessionFactory;
	}

	public Linea getLinea(String telefono)
	{			
		Linea linea = null;
		SqlSession session = getSqlSessionFactory().openSession();
		try{
			linea = session.selectOne("getLinea", telefono);
		}finally{
			session.close();
		}
		return linea;
	}
		
	public List<Linea> getLineas() throws Exception
	{
		List<Linea> lineas = null;
		SqlSession session = getSqlSessionFactory().openSession();
		try{
			lineas = session.selectList("getLineas");
		}finally{
			session.close();
		}
		return lineas;
	}

	public void updateLinea(String telefono, String antiguedad, boolean activa, String promocion, String tarifaDatos, String tarifaVoz, String dni)
	{
		SqlSession session = getSqlSessionFactory().openSession();
		try{
			
			Linea newLinea = new Linea();
			newLinea.setTelefono(telefono);
			newLinea.setAntiguedad(antiguedad);
			newLinea.setActiva(activa);
			newLinea.setPromocion(promocion);
			newLinea.setTarifaDatos(tarifaDatos);
			newLinea.setTarifaVoz(tarifaVoz);
			newLinea.setDni(dni);
			
			session.update("updateLinea", newLinea);
			session.commit();
		}catch(SqlSessionException e){
			session.rollback();
			throw e;
		}finally{
			session.close();
		}
	}
	
	public void activateLinea (String telefono, boolean activa){
		
		SqlSession session = getSqlSessionFactory().openSession();
		try{
			Linea newLinea = new Linea();
			newLinea.setTelefono(telefono);
			newLinea.setActiva(activa);
			session.update("activateLinea", newLinea);
			session.commit();
		}catch(SqlSessionException e){
			session.rollback();
			throw e;
		}finally{
			session.close();
		}
	}
	
	public List<Linea> getLineasByEstado (boolean activo){
		
		List<Linea> lineas = null;
		SqlSession session = getSqlSessionFactory().openSession();
		try{
			lineas = session.selectList("getLineasByEstado", activo);
		}finally{
			session.close();
		}
		return lineas;
	}
	
	
	public List<Linea> getLineasByCliente (String dni){
		
		List<Linea> lineas = null;
		SqlSession session = getSqlSessionFactory().openSession();
		try{
			lineas = session.selectList("getLineasByCliente", dni);
		}finally{
			session.close();
		}
		return lineas;
	}
	
	public List<Linea> getLineasByClienteAndEstado (String dni, boolean activa){
		
		Linea newLinea = new Linea();
		newLinea.setActiva(activa);
		newLinea.setDni(dni);
		List<Linea> lineas = null;
		SqlSession session = getSqlSessionFactory().openSession();
		try{
			lineas = session.selectList("getLineasByClienteAndEstado", newLinea);
		}finally{
			session.close();
		}
		return lineas;
	}

}
